\subsection{\Example{} \#6}

\lstinputlisting[style=customc]{\CURPATH/ex6.c}

\lstinputlisting[style=customasmx86]{\CURPATH/ex6.lst}

\myindex{\CStandardLibrary!time()}
\myindex{\CStandardLibrary!localtime()}
Время в формате UNIX это 32-битное значение, так что оно возвращается в паре регистров \TT{DX:AX} и сохраняется
в двух локальны 16-битных переменных.
Потом указатель на эту пару передается в функцию
\TT{localtime()}.
Функция \TT{localtime()} имеет структуру \TT{struct tm} расположенную у себя
где-то внутри, так что только указатель на нее возвращается. 
Кстати, это также означает, что функцию нельзя вызывать еще раз, пока её результаты не были использованы.

Для функций \TT{time()} и \TT{localtime()} используется
Watcom-соглашение о вызовах: первые четыре аргумента передаются через регистры
\TT{AX}, \TT{DX}, \TT{BX} и \TT{CX}, а остальные аргументы через стек.
Функции, использующие это соглашение, маркируется символом подчеркивания в конце имени.

Для вызова функции \TT{sprintf()} используется обычное соглашение \IT{cdecl} (\myref{cdecl}) вместо 
\TT{PASCAL} или Watcom, так что аргументы передаются привычным образом.

\subsubsection{Глобальные переменные}

Это тот же пример, только переменные теперь глобальные:

\lstinputlisting[style=customc]{\CURPATH/ex6_global.c}

\lstinputlisting[style=customasmx86]{\CURPATH/ex6_global.lst}

\TT{t} не будет использоваться, но компилятор создал код, записывающий в эту переменную.

Потому что он не уверен, может быть это значение будет прочитано где-то в другом модуле.

